00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "tinyxml.h"
00026
00027
00028 #ifndef TIXML_USE_STL
00029
00030 #ifndef TIXML_STRING_INCLUDED
00031 #define TIXML_STRING_INCLUDED
00032
00033 #pragma warning( disable : 4514 )
00034
00035 #include <assert.h>
00036
00037
00038
00039
00040
00041
00042
00043
00044 class TiXmlString
00045 {
00046 public :
00047
00048 TiXmlString (const char * instring);
00049
00050
00051 TiXmlString ()
00052 {
00053 allocated = 0;
00054 cstring = NULL;
00055 current_length = 0;
00056 }
00057
00058
00059 TiXmlString (const TiXmlString& copy);
00060
00061
00062 ~ TiXmlString ()
00063 {
00064 empty_it ();
00065 }
00066
00067
00068 const char * c_str () const
00069 {
00070 if (allocated)
00071 return cstring;
00072 return "";
00073 }
00074
00075
00076 unsigned length () const
00077 {
00078 return ( allocated ) ? current_length : 0;
00079 }
00080
00081
00082 void operator = (const char * content);
00083
00084
00085 void operator = (const TiXmlString & copy);
00086
00087
00088 TiXmlString& operator += (const char * suffix)
00089 {
00090 append (suffix);
00091 return *this;
00092 }
00093
00094
00095 TiXmlString& operator += (char single)
00096 {
00097 append (single);
00098 return *this;
00099 }
00100
00101
00102 TiXmlString& operator += (TiXmlString & suffix)
00103 {
00104 append (suffix);
00105 return *this;
00106 }
00107 bool operator == (const TiXmlString & compare) const;
00108 bool operator < (const TiXmlString & compare) const;
00109 bool operator > (const TiXmlString & compare) const;
00110
00111
00112 bool empty () const
00113 {
00114 return length () ? false : true;
00115 }
00116
00117
00118
00119
00120
00121
00122
00123 const char& at (unsigned index) const
00124 {
00125 assert( index < length ());
00126 return cstring [index];
00127 }
00128
00129
00130 unsigned find (char lookup) const
00131 {
00132 return find (lookup, 0);
00133 }
00134
00135
00136 unsigned find (char tofind, unsigned offset) const;
00137
00138
00139
00140
00141 void reserve (unsigned size)
00142 {
00143 empty_it ();
00144 if (size)
00145 {
00146 allocated = size;
00147 cstring = new char [size];
00148 cstring [0] = 0;
00149 current_length = 0;
00150 }
00151 }
00152
00153
00154 char& operator [] (unsigned index) const
00155 {
00156 assert( index < length ());
00157 return cstring [index];
00158 }
00159
00160
00161 enum { notfound = 0xffffffff,
00162 npos = notfound };
00163
00164 void append (const char *str, int len );
00165
00166 protected :
00167
00168
00169 char * cstring;
00170
00171 unsigned allocated;
00172
00173 unsigned current_length;
00174
00175
00176
00177 unsigned assign_new_size (unsigned minimum_to_allocate)
00178 {
00179
00180 for (unsigned pow2 = 2; pow2 < minimum_to_allocate; pow2 *= 2)
00181 {
00182 }
00183 return pow2;
00184 }
00185
00186
00187 void empty_it ()
00188 {
00189 if (cstring)
00190 delete [] cstring;
00191 cstring = NULL;
00192 allocated = 0;
00193 current_length = 0;
00194 }
00195
00196 void append (const char *suffix );
00197
00198
00199 void append (const TiXmlString & suffix)
00200 {
00201 append (suffix . c_str ());
00202 }
00203
00204
00205 void append (char single)
00206 {
00207 char smallstr [2];
00208 smallstr [0] = single;
00209 smallstr [1] = 0;
00210 append (smallstr);
00211 }
00212
00213 } ;
00214
00215
00216
00217
00218
00219 class TiXmlOutStream : public TiXmlString
00220 {
00221 public :
00222 TiXmlOutStream () : TiXmlString () {}
00223
00224
00225 TiXmlOutStream & operator << (const char * in)
00226 {
00227 append (in);
00228 return (* this);
00229 }
00230
00231
00232 TiXmlOutStream & operator << (const TiXmlString & in)
00233 {
00234 append (in . c_str ());
00235 return (* this);
00236 }
00237 } ;
00238
00239 #endif // TIXML_STRING_INCLUDED
00240 #endif // TIXML_USE_STL